﻿using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using App.Interface;
using PagedList;
using AutoMapper;
using Domain.Entidades;
using Services;
using SiteCredivale.ViewModels;
using contato = Domain.Entidades.contato;
using conteudo = Domain.Entidades.conteudo;
using VW_noticias = Domain.Entidades.VW_noticias;

namespace SiteCredivale.Controllers
{
    public class ConteudoController : Controller
    {

    private readonly IVW_menuAppService _menuapp;
    private readonly IConsultasAppService _consultasappservice;
    private readonly IVW_noticiasAppService _noticiaspp;
    private readonly Iformularios_email_AppService _formulariosapp;

    public ConteudoController()
        {


        }
    public ConteudoController(IVW_menuAppService menuapp,IConsultasAppService appconsultaservice,Iformularios_email_AppService formularioapp, IVW_noticiasAppService not)
        {
            _menuapp = menuapp;
            _consultasappservice = appconsultaservice;
            _formulariosapp = formularioapp;
        _noticiaspp = not;
            ViewBag.menu = _menuapp.GetAll();
        }
    public ActionResult Index(int codigo)
        {

            try
            {

                
              
                conteudo cont = _consultasappservice.retorna_conteudo(codigo);

             return View(cont);
            }
            catch (Exception ex)
            {
                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");

            }
        }
    public ActionResult Unidades()
        {

            try
            {



                return View();
            }
            catch (Exception ex)
            {
                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");

            }
          


        }
    public ActionResult Downloads()
    {
        try
        {
            return View();
        }
        catch (Exception ex)
        {

            TempData["msg_err"] = ex.Message;
            return RedirectToAction("erro", "Home");

        }
    }
    public ActionResult Informativos()
    {

        try
        {

            return View();

        }
        catch (Exception ex)
        {

            throw ex;
        }


    }
    public ActionResult Mobile()
        {

            try
            {
                
                return View();

            }
            catch (Exception ex)
            {

                throw ex;
            }


        }

       
        public ActionResult Contato()
        {

            try
            {
               
                ViewBag.estados = _consultasappservice.retorna_estados().OrderBy(x => x.est_descricao).ToList();
                ViewBag.setores = _consultasappservice.setor_email();
                contatoViewModel contato = new contatoViewModel(); 
                return View(contato);

            }
            catch (Exception ex)
            {

                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");
            }
          
        }
   [HttpPost]
   public ActionResult Contato(contatoViewModel contatoViewModel)
        {
            try
            {

                ViewBag.setores = _consultasappservice.setor_email();
                ViewBag.estados = _consultasappservice.retorna_estados().OrderBy(x => x.est_descricao).ToList();

                if (string.IsNullOrEmpty(contatoViewModel.nome))
                {
                    ModelState.AddModelError("nome", "*O campo nome é obrigatório");
                }
                if (contatoViewModel.setor == null)
                {
                    ModelState.AddModelError("setor", " *Selecione o setor");
                }

                if (string.IsNullOrEmpty(contatoViewModel.cidade))
                {
                    ModelState.AddModelError("cidade", "*O campo cidade é obrigatório");
                }

                if (string.IsNullOrEmpty(contatoViewModel.assunto))
                {
                    ModelState.AddModelError("assunto", "*O campo assunto é obrigatório");
                }

                if (string.IsNullOrEmpty(contatoViewModel.menssagem))
                {
                    ModelState.AddModelError("menssagem", "*O campo mensagem é obrigatório");
                }
                if (ModelState.IsValid)
                {


                    _formulariosapp.enviar_email(Mapper.Map<contatoViewModel, contato>(contatoViewModel));
                    ModelState.Clear();
                    ViewBag.res = "Email enviado com sucesso";
                    contatoViewModel = null;

                }


                return View(contatoViewModel);

            }

            catch (Exception ex)
            {

                ViewBag.err = "Erro ao enviar o email erro : " + ex.Message + ",contate o administrador";
                return View(contatoViewModel);
            }


          
        }

   public ActionResult Seguros()
        {
            try
            {
                ViewBag.estados = _consultasappservice.retorna_estados().OrderBy(x => x.est_descricao).ToList();
                ViewBag.seguros = _consultasappservice.tipos_seguros();
                segurosViewModel seguros = new segurosViewModel();
                return View(seguros);

            }
            catch (Exception ex)
            {
                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");
            }
         
        }
   [HttpPost]
   public ActionResult Seguros(segurosViewModel seguros)
        {

            try
            {
                ViewBag.estados = _consultasappservice.retorna_estados().OrderBy(x => x.est_descricao).ToList();
                ViewBag.seguros = _consultasappservice.tipos_seguros();

                if (string.IsNullOrEmpty(seguros.nome))
                {
                    ModelState.AddModelError("nome/razão", "*O campo nome é obrigatório");
                }


                if (string.IsNullOrEmpty(seguros.cidade))
                {
                    ModelState.AddModelError("cidade", "*O campo cidade é obrigatório");
                }

       
                if (ModelState.IsValid)
                {
                    _formulariosapp.enviar_email(Mapper.Map<segurosViewModel, seguros>(seguros));
                    ViewBag.res = "Email enviado com sucesso";
                    ModelState.Clear();
                    seguros = null;
                }
                return View(seguros);
            }
       
            catch (Exception ex)
            {
                ViewBag.err = "Erro ao enviar o email erro : " + ex.Message + ",contate o administrador";
                return View(seguros);
            }
        }

  public ActionResult Curriculo()
        {
            try
            {
                curriculoViewModel curriculo = new curriculoViewModel();
                return View(curriculo);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
   [HttpPost]
   public ActionResult Curriculo(curriculoViewModel curriculo)
        {
            try
            {
                
                
                if (string.IsNullOrEmpty(curriculo.nome))
                {
                    ModelState.AddModelError("nome", "*O campo nome é obrigatório");
                }
                if (curriculo.email == null)
                {
                    ModelState.AddModelError("email", " *O campo email é obrigatório");
                }

                if (string.IsNullOrEmpty(curriculo.area))
                {
                    ModelState.AddModelError("area", "*O campo mensagem é obrigatório");
                }

            
                foreach (string fileName in Request.Files)
                {
                    curriculo.arquivo = Request.Files[fileName];

                }

                if (curriculo.arquivo == null)
                {

                    ModelState.AddModelError("caminho", "* Nenhum arquivo foi selecionado");

                }

                else
                {
                    
                
                if (curriculo.arquivo.FileName == "")
                {

                    ModelState.AddModelError("caminho", "* Nenhum arquivo foi selecionado");

                }
                else if (curriculo.arquivo.ContentLength > 4000000)
                {

                    ModelState.AddModelError("caminho", "*O arquivo não pode ser maior que 5 Mb.");
                }

                }
                if (ModelState.IsValid)
                {


                    _formulariosapp.enviar_email(Mapper.Map<curriculoViewModel, curriculo>(curriculo));
                    ModelState.Clear();
                    ViewBag.res = "Email enviado com sucesso";
                    curriculo = null;


                }

               
                return View(curriculo);

            }

            catch (Exception ex)
            {
                ViewBag.err = "Erro ao enviar o email erro: " + ex.Message + ",contate o administrador";
                return View(curriculo);
            }


          
        }

   public ActionResult Noticias(int codigo, int? page, string dt1, string dt2)
        {

            try
            {

                ViewBag.page = page;
                ViewBag.dt1 = dt1;
                ViewBag.dt2 = dt2;


                VW_noticias noticia = _noticiaspp.ver_noticia(codigo);
                return View(noticia);

            }


            catch (Exception ex)
            {

                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");
            }
          

        }
   [HttpGet]
   public ActionResult MaisNoticias(int? page, string dt1, string dt2)
        {

            try

            {


                DateTime data2;
                DateTime data1;

                if (DateTime.TryParse(dt1, out data1) == false)
                {
                    data1 = DateTime.Now.AddMonths(-3);
                }

                if (DateTime.TryParse(dt2, out data2) == false)
                {
                    data2 = DateTime.Now;
                }

                if (data2 < data1)
                {
                    ModelState.AddModelError("", "A data inicial não pode ser maior que a final, a busca foi retornada no período de um ano.");
                    data1 = DateTime.Now.AddMonths(-1);
                    data2 = DateTime.Now;
                }

                ViewBag.dt1 = data1.ToString();
                ViewBag.dt2 = data2.ToString();

                var noticias = _noticiaspp.busca_noticias(data1, data2);
                const int pageSize = 15;
                var pagednoticias = noticias.ToPagedList(page ?? 1, pageSize);
                return View(pagednoticias);



            }


            catch (Exception ex)
            {

                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");
            }
         


        }
   [HttpPost]
   public ActionResult MaisNoticias(string dt1, string dt2, int? page)
        {

            try
            {
                DateTime data2;
                DateTime data1;

                if (DateTime.TryParse(dt1, out data1) == false)
                {
                    data1 = DateTime.Now.AddMonths(-3);
                }

                if (DateTime.TryParse(dt2, out data2) == false)
                {
                    data2 = DateTime.Now;
                }

                if (data2 < data1)
                {
                    ModelState.AddModelError("", "A data inicial não pode ser maior que a final");
                    data1 = DateTime.Now.AddMonths(-1);
                    data2 = DateTime.Now;
                }

                ViewBag.dt1 = data1.ToString();
                ViewBag.dt2 = data2.ToString();

                var noticias = _noticiaspp.busca_noticias(data1, data2);
                const int pageSize = 15;
                var pagednoticias = noticias.ToPagedList(page ?? 1, pageSize);
                return View(pagednoticias);

            }

            catch (Exception ex)
            {

                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");
            }
         

        }

        public ActionResult Arquivos(string arq)
        {
            FtpWebRequest objFTP = null;
            try
            {





                objFTP = Generica.FTPDetail_downloads(arq);
                objFTP.Method = WebRequestMethods.Ftp.DownloadFile;

                FtpWebResponse response = (FtpWebResponse) objFTP.GetResponse();

                return File(response.GetResponseStream(), "application/pdf",arq);



            }




            catch (Exception ex)
            {

                TempData["msg_err"] = ex.Message;
                return RedirectToAction("erro", "Home");
            }
          
        }



    }
}
